package fr.afcepf.atodcp2.benbai.servicesmetier.implementations;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import fr.afcepf.atodcp2.benbai.dao.implementations.DaoClient;
import fr.afcepf.atodcp2.benbai.dao.interfaces.IDaoAdresse;
import fr.afcepf.atodcp2.benbai.dao.interfaces.IDaoAuthentification;
import fr.afcepf.atodcp2.benbai.dao.interfaces.IDaoClient;
import fr.afcepf.atodcp2.benbai.dao.interfaces.IDaoCompteBancaire;
import fr.afcepf.atodcp2.benbai.entity.Adresse;
import fr.afcepf.atodcp2.benbai.entity.Authentification;
import fr.afcepf.atodcp2.benbai.entity.Client;
import fr.afcepf.atodcp2.benbai.entity.Commande;
import fr.afcepf.atodcp2.benbai.entity.CompteBancaire;
import fr.afcepf.atodcp2.benbai.servicesmetier.interfaces.IMetierInscription;


public class MetierInscription implements IMetierInscription {
	
	
	private BeanFactory bf = new ClassPathXmlApplicationContext("benbaiSpringConf.xml");
	private IDaoClient daoClient = (IDaoClient) bf.getBean("DaoClient");
	private IDaoAdresse daoAdresse = (IDaoAdresse)bf.getBean("DaoAdresse");
	private IDaoAuthentification daoAuthentification = (IDaoAuthentification)bf.getBean("DaoAuthentification");
	private IDaoCompteBancaire daoCompteBancaire = (IDaoCompteBancaire)bf.getBean("DaoCompteBancaire");
	
	public boolean inscrireClientSansCommande(Client client, List<Adresse> listeAdresse, Authentification authent, CompteBancaire compte){
		boolean retour = false;
		if(null!=client.getIdClient()){
			client = (Client)daoClient.getEntityById(client.getIdClient());  //hibernateTemplate.get(Client.class, client.getIdClient());    //(Personne)hibTemplate.get(Personne.class, pers.getId());
		}
		for (Adresse adresse : listeAdresse) {
			if(null!=adresse.getIdAdresse()){
				adresse = (Adresse)daoAdresse.getEntityById(adresse.getIdAdresse());
			}
		}
		if(null!=authent.getIdLogin()){
			authent = (Authentification)daoAuthentification.getEntityById(authent.getIdLogin());
		}
		if(null!=compte.getNumeroCompte()){
			compte = (CompteBancaire)daoCompteBancaire.getEntityById(compte.getNumeroCompte());
		}
		if(client.getAdresses()==null){
			client.setAdresses(new ArrayList<Adresse>());
		}
		if(client.getComptesBancaire()==null){
			client.setComptesBancaire(new ArrayList<CompteBancaire>());
		}
		if(client.getListeCommandes()==null){
			client.setListeCommandes(new ArrayList<Commande>());
		}
						
		daoClient.persistNewEntity(client);
		for (Adresse adresse : listeAdresse) {
			adresse.setClient(client);
			daoAdresse.persistNewEntity(adresse);
		}
		compte.setClient(client);
		daoCompteBancaire.persistNewEntity(compte);
		authent.setClient(client);
		daoAuthentification.persistNewEntity(authent);
		
		return retour;
	}

	@Override
	public boolean inscrireClientAvecCommande(Client client,
			List<Adresse> listeAdresse, Authentification authent,
			CompteBancaire compte, Commande commande) {
		// TODO Auto-generated method stub
		return false;
	}

}
